介紹 CharacterBody2D
A 2D physics body specialized for characters moved by script.
CharacterBody2D is a specialized class for physics bodies that are meant to be user-controlled. They are not affected by physics at all, but they affect other physics bodies in their path.
這是一個專門作為使用者控制人物用的一個類別,這個類別的物件可以影響到其他物理物件卻不會被其他人影響,今天我們使用這個類別賦予主角物理特性。
介紹 CollisionShape2D
A node that provides a Shape2D to a CollisionObject2D parent.
A node that provides a Shape2D to a CollisionObject2D parent and allows to edit it. This can give a detection shape to an Area2D or turn a PhysicsBody2D into a solid object.
這個節點可以產生並讓我們修改人物的碰撞空間。
開啟一個新專案
在場景中新增節點 CharacterBody2D
,加上後可以看到節點旁邊出現黃色警告,點擊後可以看到下述說明:
該節點無形狀,故無法與其他物件碰撞或互動
因此我們在此節點下加入子節點:CollisionShape2D
加完的 CollisionShape2D
節點也出現了警告:
CollisionShape2D 必須賦予形狀才能運作,請先請先建立形狀!
因此我們在右邊的屬性面板 Shape 點開下拉選單,新增 RectangleShape2D。
接著幫我們的人物加上圖片,在 CharacterBody2D
下新增子節點:Sprite2D
,並將 godot icon 放到 Sprite2D
右邊屬性面板的 Texture
。
# 目前的節點架構
|--CharacterBody2D
| |--CollisionShape2D
| |--Sprite2D
這時我們需要調整 RectangleShape2D
讓他符合我們角色的實際範圍 -> 點擊上方 2D 的頁面 -> 點擊 CollisionShape2D
可以在 2D 場景中看到目前用紅色點圍繞的空間,也就是能觸發物理的範圍。
透過拖曳紅色點使範圍符合圖片大小
現在可以新增我們移動人物的腳本(附加腳本、樣板選擇 Node: Default
),這裡可以參考 Day4 的解釋。
extends CharacterBody2D
@export var weight:float = 0.2
# Called when the node enters the scene tree for the first time.
func _ready():
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
# $"." 表示根節點,可以直接從左邊拖曳 CharacterBody2D 到程式碼中會自動生成。
var pos = $".".position.lerp(get_viewport().get_mouse_position(), weight)
$".".position = pos
現在播放目前場景即可達到如 Day4 的移動效果。
目前還看不到物理的效果,剩下的部分我們明天再繼續。
:)